import { IPSModelObject } from '../ipsmodel-object';
import { IPSDataEntity } from '../dataentity/ipsdata-entity';
import { IPSDEDataSet } from '../dataentity/ds/ipsdedata-set';
import { IPSSysUserRoleData } from './ipssys-user-role-data';
import { IPSSysUserRoleRes } from './ipssys-user-role-res';
import { IPSSystemModule } from '../system/ipssystem-module';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSSysUserRole
 */
export interface IPSSysUserRole extends IPSModelObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 默认用户
   * @description 值模式 [系统角色默认模式] {NONE：无、 ACCESSUSER：授权访问用户、 ACCESSADMIN：授权访问用户（管理员）、 USER：用户默认、 ADMIN：管理员默认 }
   * @type {( string | 'NONE' | 'ACCESSUSER' | 'ACCESSADMIN' | 'USER' | 'ADMIN')}
   * @default NONE
   */
  defaultUser: string | 'NONE' | 'ACCESSUSER' | 'ACCESSADMIN' | 'USER' | 'ADMIN';

  /**
   * 实体数据集对象
   *
   * @type {IPSDEDataSet}
   */
  getPSDEDataSet(): IPSDEDataSet | null;

  /**
   * 实体数据集对象
   *
   * @type {IPSDEDataSet}
   */
  get psDEDataSet(): IPSDEDataSet | null;

  /**
   * 实体数据集对象（必须存在）
   *
   * @type {IPSDEDataSet}
   */
  getPSDEDataSetMust(): IPSDEDataSet;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  get psDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntityMust(): IPSDataEntity;

  /**
   * 数据能力集合
   *
   * @type {IPSSysUserRoleData[]}
   */
  getPSSysUserRoleDatas(): IPSSysUserRoleData[] | null;

  /**
   * 数据能力集合
   *
   * @type {IPSSysUserRoleData[]}
   */
  get psSysUserRoleDatas(): IPSSysUserRoleData[] | null;

  findPSSysUserRoleData(objKey: any): IPSSysUserRoleData | null;

  /**
   * 统一资源集合
   *
   * @type {IPSSysUserRoleRes[]}
   */
  getPSSysUserRoleReses(): IPSSysUserRoleRes[] | null;

  /**
   * 统一资源集合
   *
   * @type {IPSSysUserRoleRes[]}
   */
  get psSysUserRoleReses(): IPSSysUserRoleRes[] | null;

  findPSSysUserRoleRes(objKey: any): IPSSysUserRoleRes | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  get psSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块（必须存在）
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModuleMust(): IPSSystemModule;

  /**
   * 角色标记
   * @type {string}
   */
  roleTag: string;

  /**
   * 角色类型
   * @description 值模式 [系统用户角色类型] {CUSTOM：自定义、 DEDATASET：实体数据集合 }
   * @type {( string | 'CUSTOM' | 'DEDATASET')}
   */
  roleType: string | 'CUSTOM' | 'DEDATASET';

  /**
   * 全局角色
   * @type {boolean}
   * @default false
   */
  globalRole: boolean;

  /**
   * 系统保留
   * @type {boolean}
   * @default false
   */
  systemReserved: boolean;
}
